// We also want to keep it onscreen, and separated from the
// edge by the same distance as the main part of the box is
// separated from its sourceActor
- let primary = Main.layoutManager.primaryMonitor;
+ let monitor = Main.layoutManager.findMonitorForActor(sourceActor);
let themeNode = this.actor.get_theme_node();
let borderWidth = themeNode.get_length('-arrow-border-width');
let arrowBase = themeNode.get_length('-arrow-base');
case St.Side.BOTTOM:
resX = sourceCenterX - (halfMargin + (natWidth - margin) * alignment);
- resX = Math.max(resX, primary.x + 10);
- resX = Math.min(resX, primary.x + primary.width - (10 + natWidth));
+ resX = Math.max(resX, monitor.x + 10);
+ resX = Math.min(resX, monitor.x + monitor.width - (10 + natWidth));
this.setArrowOrigin(sourceCenterX - resX);
break;
case St.Side.RIGHT:
resY = sourceCenterY - (halfMargin + (natHeight - margin) * alignment);
- resY = Math.max(resY, primary.y + 10);
- resY = Math.min(resY, primary.y + primary.height - (10 + natHeight));
+ resY = Math.max(resY, monitor.y + 10);
+ resY = Math.min(resY, monitor.y + monitor.height - (10 + natHeight));
this.setArrowOrigin(sourceCenterY - resY);
break;
// Removes @actor from the chrome
removeChrome: function(actor) {
this._chrome.removeActor(actor);
+ },
+
+ findMonitorForActor: function(actor) {
+ return this._chrome.findMonitorForActor(actor);
}
};
Signals.addSignalMethods(LayoutManager.prototype);
else if (this._inOverview)
visible = true;
else if (!actorData.visibleInFullscreen &&
- this._findMonitorForActor(actorData.actor).inFullscreen)
+ this.findMonitorForActor(actorData.actor).inFullscreen)
visible = false;
else
visible = true;
// This call guarantees that we return some monitor to simplify usage of it
// In practice all tracked actors should be visible on some monitor anyway
- _findMonitorForActor: function(actor) {
+ findMonitorForActor: function(actor) {
let [x, y] = actor.get_transformed_position();
let [w, h] = actor.get_transformed_size();
let monitor = this._findMonitorForRect(x, y, w, h);